Recent years have witnessed a significant progress in the development and applications of machine learning methods, in particular, in scaling them up to cope with large datasets (e.g., Clark and Niblett, 1989; Cohen, 1995; Dietterich, 1997; T. Mitchell, 1997; Michalski, Bratko and Kubat, 1998). There has also been a significant progress in the area of evolutionary computation (e.g., Koza, 1994; Michalewicz, 1996; Baeck, Fogel and Michalewicz, 1997; Banzhaf et al., 1998).
All conventional methods of evolutionary computation draw inspiration from the principles of Darwinian evolution in which basic operators are mutation, crossover (recombination), and selection of the fittest. These operators are very simple and domain-independent; thus, they can be employed without knowing a model of the problem domain (e.g., Holland, 1975; Goldberg, 1989; Michalewicz, 1996; M. Mitchell, 1996). Consequently, the Darwinian-type evolutionary computation has been applied to a wide range of problems, such as various kinds of optimization and search problems, automatic programming, engineering design, game playing, machine learning, pattern recognition, and evolvable hardware.
The Darwinian-type evolution is, however, semi-blind: the mutation is a random modification of the current solution; the crossover is a semi-random recombination of two solutions; and the selection (survival) of the fittest is a form of parallel hill climbing. In this type of evolution, individuals do not pass lessons learned from their experience to the next generation. Consequently, computational processes based on Darwinian evolution are not very efficient. Low efficiency has been the major obstacle in the application of evolutionary computation to very complex problems.